<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 传统的的遍历数组的方法
    var list = [51, 24, 76, 66, 39, 48, 11];

    // for (var i = 0; i < list.length; i++) {
    //     var item = list[i];
    // }

    // for (var i in list) {
    //     console.log(i, list[i]);
    // }

    // for (var item of list) {
    //     console.log(item);
    // }



    // 数组的遍历方法 -> 官方给定的专门遍历数组的方法 => 基本功能:遍历数组 每次循环时执行传入的函数

    // forEach(function(item,index,array){})   数组遍历
    // 用法: forEach()方法中传入一个函数作为参数(每次循环时执行),函数中有三个参数(形参) 分别表示循环的当前元素,下标和原数组 => 遍历数组, 每次循环时都会执行传入的函数

    // 返回值: undefined    => 只是遍历数组,并没有执行其他操作
    // 是否影响原数组:  不影响

    // var list = [51, 24, 76, 66, 39, 48, 11];
    // list.forEach(function (item, index, array) { //形参(名字可以随便改 -> 内部接收的实际值是定死的)
    //     console.log("函数执行了", item, index, array);
    // })

    // 等价于
    // 传入的函数
    // function fn(item, index, array) { //形参(名字可以随便改 -> 内部接收的实际值是定死的)
    //     console.log("函数执行了", item, index, array);
    // }
    // 每次循环时执行传入的函数
    // for (var i = 0; i < list.length; i++) {
    //     var ele = list[i];
    //     fn(ele, i, list);  // 每次循环执行传入的函数
    // }




    // map(function(item,index,array){})   数组迭代
    // 用法: map()方法中传入一个函数作为参数(每次循环时执行),函数中有三个参数(形参) 分别表示循环的当前元素,下标和原数组 => 遍历数组, 每次循环时都会执行传入的函数,函数可以设置返回值 => 将每次函数执行的结果(返回值)放到新数组中返回

    // 返回值: 根据传入的函数的返回值 生成的新数组
    // 是否影响原数组:  不影响

    // var list = [51, 24, 76, 66, 39, 48, 11];
    // var result = list.map(function (item, index, array) { //形参(名字可以随便改 -> 内部接收的实际值是定死的)
    //     console.log("函数执行了", item, index, array);
    //     return item + 100;
    // })
    // console.log(result);


    // debugger;

    // 模拟代码执行流程 => 等价于
    // 传入的函数
    // function fn(item, index, array) { //形参(名字可以随便改 -> 内部接收的实际值是定死的)
    //     console.log("函数执行了", item, index, array);
    //     return item + 100;
    // }
    // // 每次循环时执行传入的函数
    // var arr = [];
    // for (var i = 0; i < list.length; i++) {
    //     var ele = list[i]; // 每次循环的元素
    //     // i => 每次循环的下标
    //     // list => 原数组
    //     var res = fn(ele, i, list);  // 每次循环执行传入的函数
    //     arr.push(res);
    // }
    // console.log(arr);



    // filter(function (item, index, array) { })   数组过滤/筛选
    // 用法: filter()方法中传入一个函数作为参数(每次循环时执行), 函数中有三个参数(形参) 分别表示循环的当前元素, 下标和原数组 => 遍历数组, 每次循环时都会执行传入的函数, 函数可以设置返回值(要求返回一个条件表达式 true/false) => 根据函数的返回值,把满足条件的元素放到新数组中

    // 返回值: 根据传入的函数返回的条件(true/false) 把满足条件的元素放到新数组中
    // 是否影响原数组: 不影响

    // var list = [51, 24, 76, 66, 39, 48, 11];
    // var result = list.filter(function (item, index, array) { //形参(名字可以随便改 -> 内部接收的实际值是定死的)
    //     console.log("函数执行了", item, index, array, item % 2);
    //     // return item % 2 == 0; // true / false
    //     return item % 2; // 1 / 0;
    // })
    // console.log(result);

    // 模拟代码执行流程 => 等价于
    // 传入的函数
    // function fn(item, index, array) { //形参(名字可以随便改 -> 内部接收的实际值是定死的)
    //     console.log("函数执行了", item, index, array);
    //     return item % 2 == 0; // true / false
    // }
    // // 每次循环时执行传入的函数
    // var arr = [];
    // for (var i = 0; i < list.length; i++) {
    //     var ele = list[i]; // 每次循环的元素
    //     // i => 每次循环的下标
    //     // list => 原数组
    //     var res = fn(ele, i, list);  // 每次循环执行传入的函数 -> 返回一个条件
    //     if (!!res) { // 如果返回值不是布尔值 -> 隐式转换(先转布尔值在判断)
    //         arr.push(item);
    //     }
    // }
    // console.log(arr);


    // some(function (item, index, array) { })   判断数组中是否存在满足条件的元素
    // 用法: some()方法中传入一个函数作为参数(每次循环时执行), 函数中有三个参数(形参) 分别表示循环的当前元素, 下标和原数组 => 遍历数组, 每次循环时都会执行传入的函数, 函数可以设置返回值(要求返回一个条件表达式 true/false) => 只要数组中有一个元素满足条件,则返回true  都不满足返回false

    // 返回值: 判断数组中是否存在满足条件的元素,只要有一个则返回true,没有则返回false
    // 是否影响原数组: 不影响

    // var list = [51, 24, 76, 66, 39, 48, 11];  // 问你有没有 -> 先假设没有 -> 找到一个就是有(后面就没有必要找了)
    // var result = list.some(function (item, index, array) { //形参(名字可以随便改 -> 内部接收的实际值是定死的)
    //     console.log("函数执行了", item, index, array);
    //     // return item % 2 == 0;  // 偶数  -> 是否存在偶数
    //     return item >= 100;   // 是否存在 >= 100的数
    // })
    // console.log(result);


    // every(function (item, index, array) { })   判断数组中的元素是否全都满足条件
    // 用法: some()方法中传入一个函数作为参数(每次循环时执行), 函数中有三个参数(形参) 分别表示循环的当前元素, 下标和原数组 => 遍历数组, 每次循环时都会执行传入的函数, 函数可以设置返回值(要求返回一个条件表达式 true/false) => 数组所有的元素元素都满足条件,则返回true  有一个不满足返回false

    // 返回值: 判断数组中是否存在满足条件的元素,只要有一个则返回true,没有则返回false
    // 是否影响原数组: 不影响

    // 问你是否都xxx -> 先假都满足条件 -> 找到一个不满足条件的(后面就没有必要找了)
    var list = [51, 24, 76, 66, 39, 48, 11];
    var result = list.every(function (item, index, array) { //形参(名字可以随便改 -> 内部接收的实际值是定死的)
        console.log("函数执行了", item, index, array);
        // return item % 2 == 0;  // 偶数  -> 都是偶数
        // return item >= 70;   // 是否都 >= 70 
        return item >= 0;   // 是否都 >= 0 
    })
    console.log(result);







</script>

</html>